#ifndef __DAKUANG_RSA_H__
#define __DAKUANG_RSA_H__

#include <string>

namespace dakuang
{

class CRSA
{
public:

    // 生成密钥对，输出为PEM字符串
    static bool genKeyStrings(std::string& strPrivateKeyPEMString, std::string& strPublicKeyPEMString);

    // 使用PEM私钥字符串加密
    static bool encryptByPrivatePEMString(const std::string& strIn, std::string& strOut, const std::string& strKeyPEMString);

    // 使用PEM私钥字符串解密
    static bool decryptByPrivatePEMString(const std::string& strIn, std::string& strOut, const std::string& strKeyPEMString);

    // 使用PEM公钥字符串加密
    static bool encryptByPublicPEMString(const std::string& strIn, std::string& strOut, const std::string& strKeyPEMString);

    // 使用PEM公钥字符串解密
    static bool decryptByPublicPEMString(const std::string& strIn, std::string& strOut, const std::string& strKeyPEMString);

private:

    // 生成RSA密钥结构
    static void* __genKey(int nBits);

    // 使用RSA执行加密或解密
    static bool __encryptOrDecrypt(const std::string& strIn, std::string& strOut, const void* pRSA, const void* pFunc, bool bEncrypt);
};

}

#endif
